.text

.include "p30f6012.inc"

.text

.global	_ReadOpen, _BeginOpen

;Fixe adbookh,l en adresse absolue au debut de l'openbook
_BeginOpen:
			mov			#tblpage(Openbook),w2
			mov.w		w2,_adbookh
			mov			#tbloffset(Openbook),w2		;W2 pointe debut opens
			mov.w		w2,_adbook
			mov.w		#0,w2
			mov.w		w2,_adbookl
			return

;Retourne l'octet no (param 16b) de la table d'ouverture qui suit
;(W0 contient lsb, et W1 les msb des 32 bits)
_ReadOpen:
;Copie X -> LASTX
;			mov.w		_x,w2
;			mov.w		w2,_lastx

;Prend l'adresse du mot 24 bits
			mov			_adbookh,w2
			mov.w		w2,TBLPAG
			mov.w		_adbook,w2		; W2 ptr dans book

pas1h:
;voit quel octet sur les 3 on lit
			mov.w		_adbookl,w1
			cp.w		w1,#2
			bra			Z,faitle3
			cp.w		w1,#1
			bra			Z,faitle2
;Lit les bits 0-7 du mot
faitle1:
			tblrdh.w	[w2],W0			; renvoie octet 23-16
			mov.w		#1,w1			; incr modulo 24/8
			mov.w		w1,_adbookl
			return

;Lit les bits 8-15 du mot
faitle2:
			tblrdl.w	[w2],W0
			swap		w0
			and			#255,w0
			mov.w		#2,w1			; incr modul 24/8
			mov.w		w1,_adbookl
			return

;Lit les bits 16-23 du mot
faitle3:
			tblrdl.b	[w2],W0			; renvoie que octet (0-7)
;Raz le modulo no d'octet
			mov.w		#0,w1			; raz modulo 24/8
			mov.w		w1,_adbookl
;Incremente l'adresse du mot
			inc2.w		w2,w2
			bra			nz,nocar
			mov.w		_adbookh,w1
			inc.w		w1,w1
			mov.w		w1,_adbookh
nocar:
			mov.w		w2,_adbook
			return

;----------------------------------------------------------------
